package Interfaz;

import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Text;
import org.eclipse.wb.swt.SWTResourceManager;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Control;

import DTO.DTOAgregarParticipante;
import Excepcion.AgregarParticipanteException;
import Excepcion.CadenaEmailInvalidoException;
import Excepcion.EmailInvalidoException;
import Excepcion.EmailParticipanteExistenteException;
import Excepcion.NombreCaracterException;
import Excepcion.NombreParticipanteExistenteException;
import Negocios.ControlParticipante;
import Negocios.ValidacionString;


/**
 * CU009 - Dar de alta participante
 * @author 
 */
public class CU009 {

	protected Shell shlNuevoParticipante;
	private Text txtNombre;
	private Text txtEmail;
	private Label lblImagen;
	private Label label;
	private Text txtCimagenes;
	private Button btnNewButton;
	private Button btnCancelar;
	private Button btnAceptar;
	
	private int idCompetencia;
	
	private CU008 pantallaAnterior;
	
	public CU009(int idCompetencia, CU008 pantallaAnterior) {
		this.idCompetencia = idCompetencia;
		this.pantallaAnterior = pantallaAnterior;
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		
		// Centrar ventana
		Monitor primary = display.getPrimaryMonitor();
		Rectangle bounds = primary.getBounds();
		Rectangle rect = shlNuevoParticipante.getBounds();
		int x = bounds.x + (bounds.width - rect.width) / 2;
		int y = bounds.y + (bounds.height - rect.height) / 2;	    
		shlNuevoParticipante.setLocation(x, y);
		
		txtCimagenes = new Text(shlNuevoParticipante, SWT.BORDER);
		txtCimagenes.setText("C:\\Im\u00E1genes\\imagen.jpeg");
		txtCimagenes.setBounds(59, 92, 375, 21);
		shlNuevoParticipante.setTabList(new Control[]{txtNombre, txtEmail, btnNewButton, btnCancelar, btnAceptar, txtCimagenes});
		
		shlNuevoParticipante.open();
		shlNuevoParticipante.layout();
		while (!shlNuevoParticipante.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 */
	protected void createContents() {
		shlNuevoParticipante = new Shell(SWT.CLOSE | SWT.TITLE | SWT.MIN);
		shlNuevoParticipante.setSize(450, 356);
		shlNuevoParticipante.setText("Nuevo participante");
		shlNuevoParticipante.addListener(SWT.Close, new Listener() {
			public void handleEvent(Event event) {
				pantallaAnterior.llenarTabla();
				pantallaAnterior.shlParticipantes.setVisible(true);
				pantallaAnterior.shlParticipantes.forceFocus();
			}
		});
		
		txtNombre = new Text(shlNuevoParticipante, SWT.BORDER);
		txtNombre.setBounds(171, 12, 219, 21);
		txtNombre.addFocusListener(new FocusListener() {
			public void focusGained(FocusEvent e) {
				txtNombre.setBackground(SWTResourceManager.getColor(255, 255, 255));
		    }
			
		    public void focusLost(FocusEvent e) {
		    	try {
					ValidacionString.validarNombreParticipante(txtNombre.getText());
				}
				catch (NombreCaracterException ex) {
					txtNombre.setBackground(SWTResourceManager.getColor(255, 153, 153));
				}
		    }
		});
		
		txtEmail = new Text(shlNuevoParticipante, SWT.BORDER);
		txtEmail.setMessage("ejemplo@ejemplo.com");
		txtEmail.setBounds(117, 52, 219, 21);
		txtEmail.addFocusListener(new FocusListener() {
			public void focusGained(FocusEvent e) {
				txtEmail.setBackground(SWTResourceManager.getColor(255, 255, 255));
		    }
			
		    public void focusLost(FocusEvent e) {
		    	try {
					ValidacionString.validarEmail(txtEmail.getText());
				}
				catch (EmailInvalidoException ex) {
					txtEmail.setBackground(SWTResourceManager.getColor(255, 153, 153));
				}
		    }
		});
		
		Label lblNombreParticipanteequipo = new Label(shlNuevoParticipante, SWT.NONE);
		lblNombreParticipanteequipo.setText("Nombre participante/equipo:");
		lblNombreParticipanteequipo.setBounds(10, 15, 155, 15);
		
		Label lblEmail = new Label(shlNuevoParticipante, SWT.NONE);
		lblEmail.setText("Correo electr\u00F3nico:");
		lblEmail.setBounds(10, 55, 101, 15);
		
		lblImagen = new Label(shlNuevoParticipante, SWT.NONE);
		lblImagen.setBounds(10, 95, 43, 15);
		lblImagen.setText("Im\u00E1gen:");
		
		label = new Label(shlNuevoParticipante, SWT.NONE);
		label.setImage(SWTResourceManager.getImage(CU009.class, "/Interfaz/Images/default.png"));
		label.setBounds(176, 132, 93, 112);
		
		btnNewButton = new Button(shlNuevoParticipante, SWT.NONE);
		btnNewButton.setBounds(340, 127, 84, 25);
		btnNewButton.setText("Examinar ...");
		
		btnCancelar = new Button(shlNuevoParticipante, SWT.NONE);
		btnCancelar.setText("Cancelar");
		btnCancelar.setBounds(316, 275, 108, 32);
		btnCancelar.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				shlNuevoParticipante.close();
			}
		});
		
		btnAceptar = new Button(shlNuevoParticipante, SWT.NONE);
		btnAceptar.setText("Aceptar");
		btnAceptar.setBounds(184, 275, 108, 32);
		btnAceptar.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				if (datosValidos()) {
					ControlParticipante controlParticipante = new ControlParticipante();
					DTOAgregarParticipante nuevoParticipante = new DTOAgregarParticipante(idCompetencia,
							txtNombre.getText(), txtEmail.getText(), null); // La imagen no se guarda
					
					try {
						controlParticipante.agregarParticipante(nuevoParticipante);
						
						MessageBox mensaje = new MessageBox(shlNuevoParticipante, SWT.ICON_INFORMATION);
						mensaje.setMessage("El nuevo participante ha sido creado exitosamente.");
						mensaje.open();
						
						shlNuevoParticipante.close();
					}
					catch (NombreCaracterException ex1) {
						ex1.printStackTrace();
					}
					catch (EmailInvalidoException ex2) {
						ex2.printStackTrace();
					}
					catch (NombreParticipanteExistenteException ex3) {
						MessageBox error = new MessageBox(shlNuevoParticipante, SWT.ICON_ERROR);
						error.setMessage("El nombre ingresado ya existe.\n" +
								"Por favor, ingrese un nombre diferente.");
						error.open();
					}
					catch (EmailParticipanteExistenteException ex4) {
						MessageBox error = new MessageBox(shlNuevoParticipante, SWT.ICON_ERROR);
						error.setMessage("La direcci\u00F3n email ingresada ya existe.\n" +
								"Por favor, ingrese una direcci\u00F3n email diferente.");
						error.open();
					}
					catch (AgregarParticipanteException ex5) {
						MessageBox error = new MessageBox(shlNuevoParticipante, SWT.ICON_ERROR);
						error.setMessage("La competencia esta en disputa o finalizada.\n" +
								"No se permiten nuevos participantes.");
						error.open();
					} catch (CadenaEmailInvalidoException ex6) {
						MessageBox error = new MessageBox(shlNuevoParticipante, SWT.ICON_ERROR);
						error.setMessage("Direcci\u00F3n de email no v\u00E1lida.\n" +
								"Por favor, ingrese una direcci\u00F3n email v\u00E1lida.");
						error.open();
					}
				}
			}
		});

	}

	protected boolean datosValidos() {
		try {
			ValidacionString.validarNombreParticipante(txtNombre.getText());
		}
		catch (NombreCaracterException ex) {
			txtNombre.setBackground(SWTResourceManager.getColor(255, 153, 153));
			
			MessageBox error = new MessageBox(shlNuevoParticipante, SWT.ICON_ERROR);
			error.setMessage("Nombre inv\u00E1lido.\n"
					+ "Debe contener entre 1 (uno) y 50 (cincuenta) caracteres.\n"
					+ "Carateres v\u00E1lidos: A-Z a-z [espacio] 0-9 . - _");
			error.open();
			
			return false;
		}
		
		try {
			ValidacionString.validarEmail(txtEmail.getText());
		}
		catch (EmailInvalidoException ex) {
			txtEmail.setBackground(SWTResourceManager.getColor(255, 153, 153));
			
			MessageBox error = new MessageBox(shlNuevoParticipante, SWT.ICON_ERROR);
			error.setMessage("Email inv\u00E1lido.\n"
					+ "Debe contener entre 6 (seis) y 50 (cincuenta) caracteres.\n"
					+ "Caracteres v\u00E1lidos: A-Z a-z @ 0-9 . - _");
			error.open();
			
			return false;
		}
		
		return true;
	}
}
